package com.kabigon.tiny.config;

import com.kabigon.tiny.job.DemoJob01;
import com.kabigon.tiny.job.DemoJob02;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author xu.biao
 * @version v1.0
 * @Package com.kabigon.tiny.config
 * @data 2022/11/5 22:11
 */
@Configuration
public class ScheduleConfiguration {

    @Bean
    public JobDetail demoJob01() {
        return JobBuilder.newJob(DemoJob01.class)
                // 名字为 demoJob1
                .withIdentity("demoJob1")
                // 没有 Trigger 关联的时候任务是否保留。
                // 因为创建 JobDetail 时， 还没 Trigger 指向它，所以需要设置为 True, 表示保留。
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger demoJob1Trigger() {
        // 简单的调度计划的构造器
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                // 频率
                .withIntervalInSeconds(5)
                // 次数
                .repeatForever();
        // Trigger 构造器
        return TriggerBuilder.newTrigger()
                // 对应 Job 为 demoJob1
                .forJob(demoJob01())
                // 名字为 demoJob01Trigger
                .withIdentity("demoJob1Trigger")
                .withSchedule(scheduleBuilder)
                .build();
    }

    @Bean
    public JobDetail demoJob02() {
        return JobBuilder.newJob(DemoJob02.class)
                // 名字为 demoJob1
                .withIdentity("demoJob2")
                // 没有 Trigger 关联的时候任务是否保留。
                // 因为创建 JobDetail 时， 还没 Trigger 指向它，所以需要设置为 True, 表示保留。
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger demoJob02Trigger() {
        // 基于 Quartz Cron 表达水的调度计划的构造器
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/10 * * * * ? *");
        // Trigger 构造器
        return TriggerBuilder.newTrigger()
                // 对应 Job 为 demoJob1
                .forJob(demoJob02())
                // 名字为 demoJob01Trigger
                .withIdentity("demoJob2Trigger")
                .withSchedule(scheduleBuilder)
                .build();
    }

}
